#pragma once

using namespace std;

/* Abstract class Max Priority Queue */
/* All methods are pure virtual functions */

template <class T> class maxPriorityQueue {

	public :
		virtual ~maxPriorityQueue() = default;

		/* Return true if the queue is empty */
		virtual bool empty() const = 0;

		/* Return the number of elements in this queue */
		virtual int size() const = 0;

		/* Return the reference to the Max element */
		virtual const T& top() = 0;

		/* Remove the top element */
		virtual void pop() = 0;

		/* Add theElement to the queue */
		virtual void push(const T& theElements) = 0;
};